﻿using System;
using System.Collections.Generic;
using System.Text;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Win.Templates.ActionContainers;
using DevExpress.XtraLayout;
using DevExpress.ExpressApp;
using DevExpress.Utils;
using DevExpress.ExpressApp.Actions;
using System.Drawing;
using DevExpress.XtraLayout.Utils;
using DevExpress.ExpressApp.Templates;
using DevExpress.XtraBars;
using System.Windows.Forms;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Persistent.Base;
using DevExpress.Xpo;
using DevExpress.ExpressApp.Win.Editors;

namespace AppSolution.Module
{
    //public interface INavViewItem : IModelViewItem, IModelNode
    //{
    //    List<ActionItem> ActionItems { get; set; }
    //    string BackGroundImage { get; set; }
    //}
    //public class INdddd : INavViewItem
    //{

    //    public List<ActionItem> ActionItems
    //    {
    //        get
    //        {
    //            throw new NotImplementedException();
    //        }
    //        set
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }

    //    public string BackGroundImage
    //    {
    //        get
    //        {
    //            throw new NotImplementedException();
    //        }
    //        set
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }

    //    public string Caption
    //    {
    //        get
    //        {
    //            throw new NotImplementedException();
    //        }
    //        set
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }

    //    public string Id
    //    {
    //        get
    //        {
    //            throw new NotImplementedException();
    //        }
    //        set
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }

    //    public T AddNode<T>(string id)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public T AddNode<T>()
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public IModelApplication Application
    //    {
    //        get { throw new NotImplementedException(); }
    //    }

    //    public void ClearValue(string name)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public T GetNode<T>(string id)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public IModelNode GetNode(int index)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public T GetValue<T>(string name)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public bool HasValue(string name)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public int? Index
    //    {
    //        get
    //        {
    //            throw new NotImplementedException();
    //        }
    //        set
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }

    //    public int NodeCount
    //    {
    //        get { throw new NotImplementedException(); }
    //    }

    //    public IModelNode Parent
    //    {
    //        get { throw new NotImplementedException(); }
    //    }

    //    public IModelNode Root
    //    {
    //        get { throw new NotImplementedException(); }
    //    }

    //    public void SetValue<T>(string name, T value)
    //    {
    //        throw new NotImplementedException();
    //    }
    //}
    //public class ActionItem
    //{
    //    public IModelAction Action { get; set; }
    //    public DevExpress.XtraLayout.Utils.Padding padding { get; set; }
    //}
    //[DetailViewItemAttribute(typeof(INavViewItem))]
    //public class NavViewItem : ViewItem
    //{
    //    private ButtonsContainer container;

    //    public NavViewItem(Type objectType, string id)
    //        : base(objectType, id)
    //    {
    //        //deferredActions = new List<ActionBase>();
    //    }
    //    protected override object CreateControlCore()
    //    {
    //        container = new ButtonsContainer();
    //        this.container.Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0);
    //        this.container.Root.Spacing = new DevExpress.XtraLayout.Utils.Padding(0);
    //        this.container.ItemMinSize = new Size(10, 10);

    //        return container;
    //    }
    //    //public void Register(ActionBase action)
    //    //{
    //    //    ActionItemEventArgs args = new ActionItemEventArgs(this.CreateActionItem(action));
    //    //    this.OnActionItemAdding(args);
    //    //    ButtonsContainersActionItemBase item = args.Item;
    //    //    this.ActionItems.Add(action, item);
    //    //    this.AddButton(item);
    //    //    base.BestFit();
    //    //    this.OnActionItemAdded(item);
    //    //}
    //}

    //public class ShowCustomFormWindowController : WindowController
    //{
    //    public ShowCustomFormWindowController()
    //    {
    //        TargetWindowType = WindowType.Main;                        
    //    }
    //    protected override void OnActivated()
    //    {
    //        base.OnActivated();
    //    }
    //}
    public interface IMenu
    { 
    }
    public class MenuList : IMenu
    {
        public int ID { get; set; }
    }
    [DefaultClassOptions]
    public class TestObject : XPLiteObject
    {
        public TestObject(Session session)
            : base(session)
        {

        }
        private int _Id;
        [Custom("Caption", "Id")]
        [Key(false)]
        public int Id
        {
            get { return _Id; }
            set { SetPropertyValue<int>("Id", ref _Id, value); }
        }
        [NonPersistent]
        public MenuList MyMenu
        {
            get { return null; }
        }
    }
    [PropertyEditor(typeof(IMenu), true)]
    public class MenuPropertyEditor : WinPropertyEditor, IComplexPropertyEditor
    {
        public MenuPropertyEditor(Type objectType, IModelMemberViewItem model)
            : base(objectType, model)
        {

        }
        private XafApplication helper;
        protected override object CreateControlCore()
        {
            return new UserControl1(helper);
        }

        public void Setup(IObjectSpace objectSpace, XafApplication application)
        {
            if (helper == null)
            {
                helper = application;
            }
        }
    }


    //public interface INavUIDetailViewItem : IModelViewItem
    //{
    //    string ABC { get; set; }
    //    List<IModelAction> Actions { get; set; }
    //    ICustomUI CustomControlClass { get; set; }
    //    string AVF { get; set; }
    //}
    //[DetailViewItemAttribute(typeof(INavUIDetailViewItem))]
    //public class NavUIDetailViewItem : WinActionContainerViewItem
    //{
    //    private INavUIDetailViewItem _model;
    //    public NavUIDetailViewItem(Type objectType, string id) : base(objectType, id) { }
    //    public NavUIDetailViewItem(INavUIDetailViewItem model, Type objectType)
    //        : base(objectType, model.Id)
    //    {
    //        _model = model;
    //    }
    //    protected override object CreateControlCore()
    //    {
    //        //ICustomUI s = ReflectionHelper.CreateObject("UserControl1",
    //        return new UserControl1(_model, this);
    //    }
    //}
    //public interface ICustomUI
    //{
    //}
}
